初始pgm

void assign( int **mat, int n, int m ) {
int **p = mat;
int **p_end = p + n;
for ( ; p < p_end; ++p ) {
  int *q = *p;
  int *q_end = q + m;
  for ( ; q < q_end; ++q ) {
     printf( "Give an integer: " );
     scanf( "%d", q );
  }
 }
}

修改的pGM

void assign_V2( int **mat, int n, int m) {   
int **p = mat;  
for ( ; p < p + n; ++p )   
{
 int *q = *p;  
 for ( ; q < q + m; ++q ) 
  {         
    printf( "Give an integer: " );         
    scanf( "%d", q );         
  }  
 }   
}

在for循环中引入p+n和q+m. 执行:它一直要求我"给出一个integer". 解决增量问题? 谢谢.

推荐答案

这是循环

for ( ; p < p + n; ++p ) 

是不正确的,因为p在for循环中总是小于p + n(当然前提是n保持正值),或者严格执行代码会调用未定义的行为.

与第一个代码片段中的第二个代码片段相反,p_end的值最初是固定的,并且不取决于for循环中的p的值.

int **p_end = p + n;
for ( ; p < p_end; ++p ) {

C++相关问答推荐

由于未签名int导致的运行时错误"

为什么已经设置的值在C中被重置为for循环条件中的新值?

如何将不同长度的位转换成字节数组?

为什么在C中二维字符数组会有这样的行为?

VS代码';S C/C++扩展称C23真关键字和假关键字未定义

为什么我的Hello World EFI程序构建不正确?

如何在POSIX-UEFI中获得输入?

正数之和是负数

Tic-tac-toe:从文件加载存储

初始成员、公共初始序列、匿名联合和严格别名如何在C中交互?

我应该在递归中使用全局变量吗

递归打印二维数组(C编程)

向左移位3如何得到以字节为单位的位数?

&stdbool.h&q;在嵌入式系统中的使用

STM32:代码的执行似乎取决于它在闪存中的位置

从系统派生线程调用CRT

使用 strtok 多次分割一个字符串会导致意外行为

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

无法在 C 中打开文本文件,我想从中读取文本作为数据并将其写入数组

将十六进制值或十进制值分配给 uint16_t 有什么区别?