c语言左值右值
左值是一个可以改变的值,右值表示不可以改变的值。
在c中 数组是一个右值是不可改变的,如果要用他必须用指针的方法使用例如下面的代码
#include <stdio.h>
2 int main()
3 {
4
5 char str[]="I love you";
6 int count=0;
7 char *p = str;
8 while(*(p++)!='\0') // while(*str++!='\0')报错
9 {
10 count++;
11 }
12 printf("cout:%d",count);
13 return 0;
14 }
在c语言中没有string的概念,要利用字符指正是使用字符串
int main() {
char str[] = "Hello, World!"; // 字符数组表示字符串
printf("%s\n", str); // 使用 %s 格式说明符输出字符串
return 0;
}
或者
char *str = "Hello, World!";
printf("%s", str); // 输出整个字符串 "Hello, World!"
数组指针案例怎么理解
(p2)[i] = temp[i];
把p2看成一个数组,那么p2就是p2这个数组的首地址,而p2+0就是这个数组的第一个元素,这个与元素就是temp数组的第一个的地址,再在外面加上*就是去上面这个地址的内容
#include <stdio.h>
2 int main()
3 {
4
5 int temp[5]={135,2,3,4,5};
6 int (*p2)[5]=&temp;
7 int i=0;
8 for(i=0;i<5;i++)
9 {
10 printf("%d\n",*(*p2+i));
11 }
12 return 0;
13 }
函数指针例子
这里的cal_c 函数 需要用到函数指针,函数指针指向的是函数的地址,(*p)相当于是add
后面的(*fp)(num1,num2) = add(num1,num2)
1 #include <stdio.h>
2
3 int add(int num1,int num2)
4 {
5
6 return num1+num2;
7 }
8
9 int cal_c(int (*fp)(int,int),int num1,int num2)
10 {
11
12 return (*fp)(num1,num2);
13 }
14
15 int main()
16 {
17
18 int num1,num2;
19 scanf("%d%d",&num1,&num2);
20 printf("%d",cal_c(add,num1,num2));
21
22 }
extern 使用规范 以及static 局部静态变量只能在局部使用
extern int a;
a++;
int a=0;
static int a; // 静态作用域 此时 a 只能在文件内部访问,无法在外部文件使用extern 访问;!!
static 一直存放知道程序结束才会被释放掉!
auto 自动变量
int i;
typedef 别名
int main()
{
auto int i;
return 0;
}
递归算法应用–汉诺塔
#include<stdio.h>
void hanoi (int n,char x, char y, char z);
void hanoi (int n,char x,char y,char z)
{
if(n==1)
{
printf("%c--> %c\n",x,z);
}
else
{
hanoi(n-1,x,z,y);
printf("%c-->%c\n",x,z);
hanoi(n-1,y,x,z);
}
}
int main(void )
{
int a;
printf("输入汉诺塔的层数:");
scanf("%d",&a);
hanoi(a,'X','Y','Z');
return 0;
}
continue 在c++中的用法
在C++中,continue 是一种控制流语句,用于在循环中跳过当前迭代的剩余部分,直接进入下一次迭代。continue 语句通常用于循环结构(例如 for 或 while 循环),而不是在 switch 语句中使用。
以下是一个简单的示例,演示了 continue 语句的用法:
#include <iostream>
int main() {
for (int i = 0; i < 5; ++i) {
if (i == 2) {
std::cout << "Skipping iteration when i is 2." << std::endl;
continue; // 跳过当前迭代,进入下一次迭代
}
std::cout << "Current value of i: " << i << std::endl;
}
return 0;
}
在这个例子中,当 i 的值等于2时,continue 语句将被执行,导致当前迭代被跳过,直接进入下一次迭代。因此,当 i 等于2时,不会输出与该值相关的信息。
输出结果将是:
Current value of i: 0
Current value of i: 1
Skipping iteration when i is 2.
Current value of i: 3
Current value of i: 4
需要注意的是,continue 语句只影响包含它的最内层循环,如果在嵌套循环中使用了 continue,只有内层循环的当前迭代