-
程序中没有语法错误,但是使用指针的时候有问题,C语言里有一条“规则”,就是指针变量在使用前必须初始化,如果不初始化,可能会报错,可能会有更严重的问题。
在上面的程序中,结构中的两个指针没有初始化然后分配,因此会导致运行时错误。 (请注意,编译器不会检查您是否已初始化指针,因此程序中没有语法错误)。
这是如何做到的:
我已经评论了所有更改,因此它们应该易于理解。
#include""
#include""动态内存管理相关功能的头文件。
void main()
struct data
char *name;
char *adress;
struct data me;
char*)malloc(10);动态打开内存并初始化指针。
char*)malloc(20);动态打开内存并初始化指针。
printf("请输入名字:");
scanf("%s",;
scanf("%s",;
printf("我的名字:%s",;
free(;指针用于释放内存。
free(;指针在使用后释放内存。
-
scanf 中缺少地址字符“&”
-
指针使用问题。
#include
void main()
struct data
char name[10];
char adress[50];
struct data me;
printf("请输入名字:");
scanf("%s",;
scanf("%s",;
printf("我的名字:%s",;
-
第一点考虑的是优先级,即算术运算符大于逻辑运算符,第二点是两个整数的除法还是整数,即去掉小数点后的部分,第三点也是最重要的一点是逻辑运算,也就是在C语言中, 非 0 数我们认为它的逻辑值是 1,即为真,整数 0 的逻辑值为 0,即为假,所以这个问题的左边是 1,右边也是 1,逻辑或一侧是 1,所以选择 D。
-
答案是D
理由:这是算子优先级的知识,整数除法的知识!
有两点需要理解:1.算术运算符优先于逻辑运算符。
2.整数除法的结果仍然是整数,小数部分将被丢弃!
-
d 这种表达式的最终结果只是 0 或 1所以排除 a 和 b。
只要有一个 1,整个表达式就是 1
C 语言中没有逻辑变量,只能用 1 表示 true,用 0 表示 false。
子表达式的最终结果只有 true 和 false。
-
不做有多简单? 脑力抽水。
-
int a[4][10] 是一个二维数组,即数组 int *p 指向数组的指针。
int*q[4] 是一个指针数组(它本身就是一个数组),选项 ap 是一个只能指向一维数组的指针(**p 指向二维数组),而 a 是二维数组。
所以一个错误。 选项 bq[i] = a[i]。
q[i] 是一个指针,a[i] 是一个包含 10 个元素的数组,a[i] 表示每行有 10 个元素的行。
也就是说,a[4][10] 表示 4 行和 10 列(根据编译器的不同,它也可以被认为是 4 列和 10 行)。
所以 b 可以被认为是一个 int *pt;
pt =a[i];没错。
选项 C 已经指出 a[i] 是一个数组。
p 是表示地址的指针。
p=a[i];没错。
选项 dp 是一个指针,它是一个地址。
a[2][1] 表示第 2 行第 1 列中元素的地址,因此 p =&a[2][1]。
换句话说,它是。
int n;
p = &n;
没错。 综上所述,a 是一个选项,错误是由于: 错误的语句 指针只能指向一维数组的名称,指针的指针可以指向二维数组的名称。
-
选择 b、a、c 和 d 将地址复制到指针 q。
-
b*q[4] 的定义是定义一个数组指针,这意味着数组中的每个元素都是一个指针。
-
对于 a,它表示起始地址,而 p 是指针,当然可以分配。 、c 和 d 是相同的。 但是对于 b,q[] 表示特定元素的地址,a[] 是这一行中元素的起始地址,两者肯定不等价。